package com.qingcloud.adminbackend.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qingcloud.adminbackend.entity.equipment.StationGroupEquipmentBO;
import com.qingcloud.adminbackend.entity.equipment.SysEquipment;
import com.qingcloud.adminbackend.entity.equipment.SysEquipmentDTO;
import com.qingcloud.adminbackend.entity.stationgroup.StationgroupAuthDTO;
import com.qingcloud.adminbackend.entity.stationgroup.SysOrgStationGroup;
import com.qingcloud.adminbackend.entity.stationgroup.SysStationGroup;
import com.qingcloud.adminbackend.entity.stationgroup.SysStationGroupBO;
import com.qingcloud.adminbackend.entity.sysstation.SysStationMoDTO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * <p>
 * 设备组 Mapper 接口
 * </p>
 *
 * @author wangjinnan
 * @since 2018-11-15
 */
public interface SysStationGroupMapper extends BaseMapper<SysStationGroup> {
    /**
     * 分页查询可管理的设备组
     *
     * @param page
     * @param sysStationGroup
     * @return
     */
    IPage<SysStationGroup> findStationGroupPage(Page<SysStationGroup> page,
                                                @Param("stationGroup") SysStationGroupBO sysStationGroup,
                                                @Param("groupIds") List<String> groupIds);

    SysStationGroup findStationGroupById(@Param("id") String id);

    List<SysEquipment> findAddStationGroupEquipments(Page<SysEquipment> page,
                                                     @Param("query") String query,
                                                     @Param("groupId") String groupId,
                                                     @Param("oriGroupId") String oriGroupId,
                                                     @Param("groupIds") List<String> groupIds);

    /**
     * 删除客户绑定设备组
     *
     * @param ids
     */
    void deleteOrgStationGroup(@Param("orgIds") List<String> ids);

    /**
     * 客户可用设备组
     *
     * @param orgId
     * @return
     */
    List<SysStationGroup> findStationGroup(@Param("orgIds") List<String> orgIds);

    /**
     * 绑定客户和设备组的关系
     *
     * @param sysOrgStationGroups
     */
    void addStationGroupOrg(@Param("sysOrgStationGroups") List<SysOrgStationGroup> sysOrgStationGroups);

    /**
     * 删除设备组
     *
     * @param ids
     */
    void deleteStationGroup(@Param("orgIds") List<String> ids);

    /**
     * 已绑定的设备
     *
     * @param orgId
     * @return
     */
    List<SysStationGroup> findMyStationGroup(String orgId);

    List<SysEquipmentDTO> findStationGroupEquipments(Page<SysEquipmentDTO> page, @Param("groupId") String groupId);

    /**
     * 查询该客户所属设备
     *
     * @param ids
     * @return
     */
    List<String> findStationGroupByOrgIds(@Param("orgIds") List<String> ids);

    /**
     * 删除用户关联的设备组
     *
     * @param stationGroupId
     */
    void deleteUserStationGroup(@Param("stationGroupIds") List<String> stationGroupId);

    /**
     * 删除设备组关联的设备
     *
     * @param stationGroupIds
     */
    void deleteStationGroupEquipment(@Param("stationGroupIds") List<String> stationGroupIds);

    /**
     * 根据用户ID查询已经授权给用户的设备组
     *
     * @param userId 用户ID
     */
    List<StationgroupAuthDTO> findAuthByUserId(@Param("userId") String userId);

    /**
     * 根据用户组ID查询已经授权给用户的设备组
     *
     * @param usergroupId 用户组ID
     */
    List<StationgroupAuthDTO> findAuthByUsergroupId(@Param("usergroupId") String usergroupId);

    /**
     * 通过客户ID查询设备组
     *
     * @param orgIds
     * @return
     */
    List<SysStationGroup> selectStationGroups(@Param("orgIds") List<String> orgIds, @Param("ids") List<String> ids);

    /**
     * 订单下的设备及设备组下的设备
     *
     * @param page
     * @param stationGroupEquipmentBO
     * @return
     */
    IPage<SysEquipmentDTO> findStationGroupEquipmentList(Page<SysEquipmentDTO> page, @Param("equipmentBO") StationGroupEquipmentBO stationGroupEquipmentBO);

    /**
     * 空间对象
     *
     * @return
     */
    List<SysStationMoDTO> findStationMo();

    /**
     * 找到所有属于分支机构的设备组
     */
    List<SysStationGroup> findStationgroupBelongOrg();

    List<SysStationGroup> selectAllGroup(@Param("businessType") Integer businessType);
}
